import java.io.File

//拓展函数
fun String.addExt08() = "!".repeat(count())

//泛型的拓展函数
fun<T> T.easyPrint():Unit = println(this)

//为啥要传入拓展函数而不是普通的匿名函数？拓展函数里自带了接收者对象的this隐式调用
//为啥是泛型的拓展函数？传入泛型拓展函数可以任意对象调用及操作这个对象

//T.() -> Unit

//泛型写法
//匿名函数，也可以是拓展函数
public inline fun <T> T.apply(block: T.() -> Unit): T {
    block()
    return this
}

//如果不是泛型写法
public inline fun File.apply(block: File.() -> Unit): File {
    block()
    return this
}

fun main() {
    val file = File("XXX").apply {
        setReadable(true)
    }

    //分解
    //1.定义拓展函数
    fun File.ext():Unit {
        setReadable(true)
    }

    //2.给block变量赋值
    val block = File::ext

    //3.传入apply函数
    File("xxx").apply{ block }

}

fun doSomething(fix:() -> Unit){
    println("abc".addExt08())
}
